# 进程池 线程池
import time
from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor
import os

# 线程池  默认大小 min(32, (os.cpu_count() or 1) + 4)
pool = ThreadPoolExecutor(5)


# 进程池 可以传数字 默认cpu个数
# pool = ProcessPoolExecutor()


# 池创建后，里面的线程数量固定，不会重复出现创建和销毁的过程


def task(n):
    print(n)
    time.sleep(2)
    return n


if __name__ == '__main__':
    # t_list = []
    for i in range(20):
        # 异步提交  提交可以添加回调函数，获得返回时的结果
        pool.submit(task, i).add_done_callback(lambda n: print('>>:', n.result()))
        # 朝池子中提交任务，池子中的线程会自动来处理任务
        # t_list.append(res)

    # pool.shutdown() # 关闭线程池，等所有任务结束后在停止
    #
    # for i in t_list:
    #     print('>>>',i.result())
    #     # res.result()  返回任务异步执行的结果
